package vista;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import controlador.ControladorGuardar;
import controlador.ControladorPausar;
import controlador.ControladorPegote;
import controlador.ControladorTorreBlanca;
import controlador.ControladorTorreDorada;
import controlador.ControladorTorrePlateada;
import controlador.ControladorArena;
import controlador.JLabelConPosicion;
import modelo.juego.Juego;
import modelo.mapa.*;

public final class VistaJuego {

	private static VistaJuego instancia = null;
	private static final long serialVersionUID = 1L;
	private JFrame ventana;
	private Container contenedor;
	private JPanel panelInf;
	private JPanel panelSup;
	private JPanel grilla;
	private BorderLayout layout;
	private GridLayout gridLayout;
	private VistaJugador panelDerecho;
	
	
	public VistaJugador getPanelDerecho() {
		return panelDerecho;
	}

	public void setPanelDerecho(VistaJugador panelDerecho) {
		this.panelDerecho = panelDerecho;
	}


	private JButton [] botones;
	private int numeroBotones=0;
	private JLabelConPosicion matrizGrilla [][];
	
	public static VistaJuego ObtenerVistaJuego() {
		
		if (instancia == null) {
			instancia = new VistaJuego();
			
		}
		return instancia;
	}
	
	public JPanel getGrilla() {
		return grilla;
	}
	public JLabelConPosicion[][] getMatrizGrilla() {
		return matrizGrilla;
	}
	
	public VistaJuego()  {
		ventana = new JFrame ("Juego");
		botones = new JButton[8];
		layout = new BorderLayout();
		
		ventana.setBounds (0, 0, 800, 600);
		contenedor = ventana.getContentPane();
		contenedor.setLayout(layout);
		crearPanelDerecho();
		crearPanelInferior();
		crearPanelSuperior();
		crearGrilla();
		
		/*System.out.println("se crea vistajuego");*/
	}
	
	private void crearBoton(String titulo, MouseListener e) {
		botones[numeroBotones]= new JButton (titulo);
		botones[numeroBotones].setToolTipText("Soy Drag'nDrop");
		botones[numeroBotones].addMouseListener(e);
		numeroBotones++;	
	}
	
	public JFrame getVentana() {
		return ventana;
		
	}
	
	private void crearPanelSuperior(){
		panelSup = new JPanel(new GridLayout());
		
		this.crearBoton("Guardar", new ControladorGuardar());
		this.crearBoton("Pausar", new ControladorPausar());
		this.crearBoton("Salir", new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}			
		});
				
		for (int i=5; i<numeroBotones; i++){
			panelSup.add(botones[i]);
		}
		contenedor.add(panelSup, BorderLayout.NORTH);
	}
	
	private void crearBoton(String titulo, ActionListener e) {
		botones[numeroBotones]= new JButton (titulo);
		botones[numeroBotones].addActionListener(e);
		numeroBotones++;
		
	}

	private void crearPanelInferior(){
		panelInf = new JPanel(new GridLayout());
		
		this.crearBoton("Torre Blanca", new ControladorTorreBlanca());
		this.crearBoton("Torre Plateada", new ControladorTorrePlateada());
		this.crearBoton("Torre Dorada", new ControladorTorreDorada());
		this.crearBoton("Pegote", new ControladorPegote());
		this.crearBoton("Arena", new ControladorArena());
		
		for (int i=0; i<numeroBotones; i++){
			panelInf.add(botones[i]);
		}
		contenedor.add(panelInf, BorderLayout.SOUTH);
	}
	
	private void crearPanelDerecho(){
		panelDerecho = new VistaJugador(new GridLayout());
		JLabel boton = new JLabel();
		JLabel boton2 = new JLabel();
		boton.setOpaque(true);
		boton.setBackground(Color.YELLOW );
		boton.setToolTipText("Dinero");
		
		boton2.setOpaque(true);
		boton2.setBackground(Color.RED);
		boton2.setToolTipText("Vida");
		/*boton.setFont(new Font("San Sefrif", 1 ,8));*/
		
		panelDerecho.setLabel(boton, 0);
		panelDerecho.setLabel(boton2, 1);
		contenedor.add(panelDerecho, BorderLayout.EAST);
		Juego.ObtenerJuego().getJugador().addObserver(this.panelDerecho);
	}
	
	
	public void RecorrerGrilla(){
			Component[] ArrayAux = grilla.getComponents();
			JLabelConPosicion label;
			
			for (int i = 0; i < ArrayAux.length ; i++){
				label = (JLabelConPosicion) ArrayAux[i];
				System.out.println("hola" + label.GetPosicion().getX() + " " + label.GetPosicion().getY());
			} 		
	}
		
	private void crearGrilla() {
		grilla = new JPanel();
		gridLayout = new GridLayout(40,40);
		grilla.setLayout(gridLayout);
		matrizGrilla = new JLabelConPosicion [40][40];

		for (int i=0; i<= 39; i++) {
			for (int j= 0; j<=39; j++){
				JLabelConPosicion label = new JLabelConPosicion("");
				label.setOpaque(true);
				label.setBackground(Color.GREEN);
				grilla.add(label);
				label.SetPosicion(new Posicion(i,j));
				matrizGrilla[i][j]=label;
			}
		}
		
		contenedor.add(grilla, BorderLayout.CENTER);
				
	}
	
	public JLabelConPosicion getCasillaDeLaGrilla(int x, int y){
		return this.matrizGrilla[x][y];
	}

		
	public static void main(String[] args) {
		VistaJuego v = VistaJuego.ObtenerVistaJuego();
		v.getVentana().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		v.getVentana().setResizable(false);
		v.getVentana().setVisible(true);
		
	}
	


}
